package level01.three;

import level01.three.MyAfter;
import level01.three.MyBefore;
import level01.three.MyTest;
import level01.three.Student;
import org.junit.Test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 定义一个注解解析类 ParseMyAnno，并定义方法 parse()，方法中：反射解
 * 析注解，先运行@MyBefore 的方法，然后运行@MyTest 的方法，最后运
 * 行@MyAfter 的方法
 */
public class ParseMyAnno {
    //使用 JUnit 的@Test 注解运行 parse()方法
    @Test
    public void parse() throws Exception {
        //获取Student类
        Class<?> aClass = Class.forName("level01.three.Student");
        //实例化Student类
        Object instance = aClass.getDeclaredConstructor().newInstance();
        //获取Student类的方法
        Method[] method = aClass.getMethods();
        //遍历方法
        for (Method method1 : method) {
            //如果方法上有MyBefore注解
            if (method1.isAnnotationPresent(MyBefore.class)) {
                //调用方法
                method1.invoke(instance);
            } else if (method1.isAnnotationPresent(MyTest.class)) {
                method1.invoke(instance);
            } else if (method1.isAnnotationPresent(MyAfter.class)) {
                method1.invoke(instance);
            }
        }
    }
}
